package com.yuw.sort;

import java.util.Scanner;

public class SelectSortTestDriver {

	public static void main(String[] args) {
		selectSort();
	}

	/**
	 * 插入排序算法测试
	 */
	public static void selectSort() {
		// 初始化数组
		int[] arr = initArr();
		// 选择排序算法处理
		doSelectSort(arr);
		// 显示打印结果
		printArr(arr);
	}

	/**
	 * 选择排序（从小到大）
	 * 
	 * @param arr 被排序的数组
	 */
	private static void doSelectSort(int[] arr) {
		// 外层循环，控制N轮处理（最后一个数不需要则进行选择，N-1轮）
		for (int i = 0; i < arr.length - 1; i++) {
			// 临时变量：最值下标,默认是下标为i的元素
			int index = i; // index用于记录最值的下标

			// 内存循环，从剩余的没有排序的数列中选取最值
			for (int j = i; j < arr.length; j++) {
				// 选取最值
				if (arr[index] > arr[j]) {
					// 最值就是下标为j的元素
					index = j;
				}
			}

			// for循环结束之后，index就是最值的下标
			if (index != i) {
				// 临时变量：最值,默认是下标为i的元素
				int temp = arr[i];
				// 进行选择交换
				arr[i] = arr[index];
				arr[index] = temp;
			}
		}
	}

	/**
	 * 初始化排序的数组
	 * 
	 * @return 被排序的数组
	 */
	private static int[] initArr() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入需要排序的数组的元素个数：");
		// 数组个数
		int count = sc.nextInt();
		// 创建数组
		int[] arr = new int[count];
		// 初始化数组
		for (int i = 0; i < count; i++) {
			System.out.println("请输入数组的第" + (i + 1) + "个元素的值：");
			int input = sc.nextInt();
			arr[i] = input;
		}

		// 返回值
		return arr;
	}

	/**
	 * 打印数组元素内容
	 * 
	 * @param arr 被打印数组
	 */
	private static void printArr(int[] arr) {
		for (int i : arr) {
			System.out.print("  " + i);
		}
		// 换行
		System.out.println();
	}
}
